package Lambda表达式;

public class test2 {
    public static void main(String[] args) {


        /*Lambda表达式只能简化函数式接口的匿名内部类的写法
        函数式接口：
        有且仅有一个抽象方法的接口叫 函数式接口，接口上方可以加@FunctionalInterface注解*/

        //1.利用匿名内部类的形式去调用下面的方法
        //调用一个方法的时候，如果方法的形参是一个接口，那么我们要传递这个接口的实现类对象
        //如果实现类对象只用到一次，就可以用匿名内部类的形式进行书写

        method(new Swim() {
            @Override
            public void swimming() {
                System.out.println("正在游泳");
            }
        });

        //2.利用Lambda表达式进行改写
        method(
                ()->{
                    System.out.println("还在游泳");
                }
        );
        //3.利用Lambda表达式继续省略
        /*
        1.参数类型可以省略不写
        2.如果只有一个参数，参数类型可以省略，同时()也可以省略。
        3.如果Lambda表达式方法体只有一行，大括号{}，方法体后的分号;，return可以省略不写，需要同时省略
        */
        method(()-> System.out.println("继续游泳"));

    }


    public static void method(Swim s) {
        s.swimming();
    }

    interface Swim {
        public abstract void swimming();
    }
}
